#include <54func.h>
//实现：A先执行，B再执行
typedef struct shareRes_s{
    int flag;//标志位：0--->A未写，1--->A已写
    pthread_mutex_t mutex;
}shareRes_t;
void A()
{
    printf("Before A\n");
    sleep(3);
    printf("After A\n");
}
void B()
{
    printf("Befor B\n");
    sleep(3);
    printf("After B\n");
}
void *threadFunc(void *arg)
{
    shareRes_t *pshareRes = (shareRes_t *)arg;

    //循环等待，查看标志位是否被置为1，该过程的缺点就是一直占用消耗资源，可以改为阻塞，进而引出“条件变量”
   while(1)
   {
       pthread_mutex_lock(&pshareRes->mutex); 
       if(pshareRes->flag == 1)
       {
           pthread_mutex_unlock(&pshareRes->mutex);
           break;
       }
       pthread_mutex_unlock(&pshareRes->mutex);
   }
   //跳出上述循环，说明A已经执行完成，且将标志位设置为 1
    B();
    pthread_exit(NULL);
}
int main()
{
    shareRes_t shareRes;//定义一个结构体
    shareRes.flag = 0;//初始化标志位
    pthread_t tid;
    pthread_mutex_init(&shareRes.mutex,NULL);//初始化锁
    pthread_create(&tid,NULL,threadFunc,&shareRes);//创建子线程

    sleep(2);

    A();
    //A执行结束后，将标志位设置未1，但是因为标志位是共享资源，因此需要对其进行加锁
    pthread_mutex_lock(&shareRes.mutex);
    shareRes.flag = 1;
    pthread_mutex_unlock(&shareRes.mutex);
    pthread_join(tid,NULL);
    return 0;
}
